home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 413_01 / sndblst4 / progspec.doc < prev    next >
Text File  |  1993-12-10  |  9KB  |  289 lines

  1.  
  2. Programming the Sound Blaster ADC/DAC:
  3.  
  4. 2x6h    DSP Reset Port                       Write Only
  5. 2xAh    DSP Read Data Port                   Read Only
  6. 2xCh    DSP Write Data or Command            Write
  7. 2xCh    DSP Write Buffer Status (bit 7)      Read
  8. 2xEh    DSP Data Available Status Bit 7)     Read Only
  9.  
  10. x = 1,2,3,4,5,6 for the Sound Blaster <= 1.5
  11. x = 1,2,3,4,5,6 for the Sound Blaster Micro Channel Version
  12. x = 2,4 for the Sound Blaster 2.0
  13. x = 2,4 for the Sound Blaster Pro
  14.  
  15. The DSP: -----------------------------------------------------------------------
  16.  
  17. Due to the different mode and the hardware performance of different audio
  18. cards, the maximum sampling rate is different.
  19.  
  20. Input (ADC):
  21. Sound Blaster (<=1.5)   Mono/Normal mode:       8-bit only  4KHz to 13KHz
  22. Sound Blaster (2.0)     Mono/Normal mode:       8-bit only  4KHz to 13KHz
  23.                         Mono/High Speed mode:   8-bit only  13KHz to 15KHz
  24. Sound Blaster Pro       Mono/Normal mode:       8-bit only  4KHz to 23KHz
  25.                         Mono/High Speed mode:   8-bit only  23KHz to 44.1KHz
  26.  
  27. Output (DAC):
  28. Sound Blaster (<=1.5)   Mono/Normal mode:       8-bit only  4KHz to 23KHz
  29. Sound Blaster (2.0)     Mono/Normal mode:       8-bit only  4KHz to 23KHz
  30.                         Mono/High Speed mode:   8-bit only  23KHz to 44.1KHz
  31. Sound Blaster Pro       Mono/Normal mode:       8-bit only  4KHz to 23KHz
  32.                         Mono/High Speed mode:   8-bit only  23KHz to 44.1KHz
  33.  
  34. Some DSP Commands:
  35.  
  36. 10h  Direct mode 8-bit DAC (single byte data transfer)
  37. 14h  DMA mode 8-bit DAC
  38. 20h  Direct mode 8-bit ADC (single byte data transfer)
  39. 24h  DMA mode 8-bit ADC
  40. 40h  Set Time Constant
  41. 48h  Set Block Size
  42. 91h  High Speed DMA mode 8-bit DAC
  43. 99h  High Speed DMA mode 8-bit ADC
  44. D1h  Turn on Speaker
  45. D3h  Turn off Speaker
  46. D0h  Halt DMA in progress
  47. D4h  Continue DMA
  48. E1h  Get DSP version (read major ver then minor)
  49.  
  50. To reset the DSP:
  51.  
  52. 1.  Write a 01h to port 2x6h
  53. 2.  Wait for 3 microseconds
  54. 3.  Write a 00h to port 2x6h
  55. 4.  Read port 2xAh until a 0AAh is read (see below for how to read from 2xAh)
  56.  
  57. If there is no 0AAh after about 100 reads, abort and declare that there is no
  58. Sound Blaster present (or error)
  59.  
  60. To write to the DSP (all writes to 2xCh MUST follow this procedure)
  61.  
  62. 1.  Read 2xCh until bit 7 is clear
  63. 2.  Write to 2xCh
  64.  
  65. To read from the DSP (all reads from 2xAh MUST follow this procedure)
  66.  
  67. 1.  Read 2xEh until bit 7 is set
  68. 2.  Read from 2xAh
  69.  
  70. Interrupts:
  71.  
  72.     In DMA DAC and DMA ADC modes, a single interrupt will occur after the
  73. block of data has been read/written.  To clear the interrupt, read 2xEh
  74. once (as well as clearing the PIC).
  75.  
  76. Ignoring Interrupts:
  77.  
  78.     The interrupt can be ignored if you poll the DMAC (DMA Controller).
  79. Once the DMAC reports a count of 0FFFFh the transfer is finished, read
  80. 2xEh once and you are finished.  You can also poll the DMA status register
  81. and wait for the Terminal Count reached bit to be set (I found that the first
  82. read after starting the transfer had the bit set, but not the second).
  83.  
  84. Note to VESA/Local Bus Video users:
  85.  
  86.     These video cards use DMA channel 1 which is the DMA channel used by
  87. the Sound Blaster.  Any video accesses will screw up the output of the
  88. Sound Blaster.
  89.  
  90. Calculating the Time Constant:
  91.     Normal Speed:
  92.         Time Constant = 256 - (1,000,000 / sampling rate)
  93.                       = 256 - (1,000,000 / 8,000 )
  94.                       = 131
  95.  
  96.     High Speed:
  97.         Time Constant = (MSByte of) 65536 - (256,000,000 / sampling rate)
  98.                       = (MSByte of) 65536 - (256,000,000 / 44,100)
  99.                       = (MSByte of) 59731
  100.                       = (MSByte of) 0E953h
  101.                       = 0E9h
  102.  
  103. Direct mode DAC:
  104.  
  105. 1.  Write a D1h to 2xCh
  106. 2.  Write a 10h to 2xCh
  107. 3.  Write the 8-bit data sample to 2xCh
  108. 4.  Wait for the correct timing (must do your own timing)
  109.     Repeat steps 2-4 until end of data
  110. 5.  Write a D3h to 2xCh
  111.  
  112. Normal speed DMA mode DAC:
  113.  
  114. 1.  Write a D1h to 2xCh
  115. 2.  Setup Interrupt service routine
  116. 3.  Write a 40h to 2xCh
  117. 4.  Write Time Constant to 2xCh
  118. 5.  Program the DMAC (DMA Controller)
  119. 6.  Write 14h to 2xCh
  120. 7.  Write the LSByte of Data Length - 1
  121. 8.  Write the MSByte of Data Length - 1
  122. 9.  Service Interrupt (may need to repeat steps 5-7 in the ISR)
  123. 10. Restore original Interrupt Service Routine
  124. 11. Write a D3h to 2xCh
  125.  
  126. Commands can be written to the DSP while waiting for the interrupt
  127.  
  128. High speed DMA mode DAC:
  129.  
  130. 1.  Write a D1h to 2xCh
  131. 2.  Setup Interrupt service routine
  132. 3.  Write a 40h to 2xCh
  133. 4.  Write Time Constant to 2xCh
  134. 5.  Program the DMAC (DMA Controller)
  135. 6.  Write 48h to 2xCh
  136. 7.  Write the LSByte of Data Length - 1
  137. 8.  Write the MSByte of Data Length - 1
  138. 9.  Write 91h to 2xCh
  139. 10. Service Interrupt (may need to repeat steps 5-7 in the ISR)
  140. 11. Restore original Interrupt Service Routine
  141. 12. Write a D3h to 2xCh
  142.  
  143. Commands CANNOT be written to the DSP while waiting for the interrupt
  144. Resetting the DSP is the procedure used to halt DMA in progress
  145.  
  146. Direct mode ADC:
  147.  
  148. 1.  Write a 20h to 2xCh
  149. 2.  Read the 8-bit data sample from 2xAh
  150. 3.  Wait for the correct timing (must do your own timing)
  151.     Repeat steps 1-3 until finished
  152.  
  153. Normal speed DMA mode ADC:
  154.  
  155. 1.  Setup Interrupt service routine
  156. 2.  Write a 40h to 2xCh
  157. 3.  Write Time Constant to 2xCh
  158. 4.  Program the DMAC (DMA Controller)
  159. 5.  Write 24h to 2xCh
  160. 6.  Write the LSByte of Data Length - 1
  161. 7.  Write the MSByte of Data Length - 1
  162. 8.  Service Interrupt (may need to repeat steps 5-7 in the ISR)
  163. 9.  Restore original Interrupt Service Routine
  164.  
  165. Commands can be written to the DSP while waiting for the interrupt
  166.  
  167. High speed DMA mode ADC:
  168.  
  169. 1.  Setup Interrupt service routine
  170. 2.  Write a 40h to 2xCh
  171. 3.  Write Time Constant to 2xCh
  172. 4.  Program the DMAC (DMA Controller)
  173. 5.  Write 48h to 2xCh
  174. 6.  Write the LSByte of Data Length - 1
  175. 7.  Write the MSByte of Data Length - 1
  176. 8.  Write 99h to 2xCh
  177. 9.  Service Interrupt (may need to repeat steps 5-7 in the ISR)
  178. 10. Restore original Interrupt Service Routine
  179.  
  180. Commands CANNOT be written to the DSP while waiting for the interrupt
  181. Resetting the DSP is the procedure used to halt DMA in progress
  182.  
  183. The Mixer:  --------------------------------------------------------------------
  184. The mixer can only be found on the Sound Blaster Pro.
  185.  
  186. It mixes the following audio sources:
  187. -digitized voice
  188. -FM synthesized music
  189. -CD-audio
  190. -line-in
  191. -microphone input
  192. -PC speaker output
  193.  
  194. It allows software to control volume on:
  195. -digitized voice
  196. -FM synthesized music
  197. -CD-audio
  198. -line-in
  199. -microphone mixing
  200. -overall master volume
  201.  
  202. The mixer setting can be done with 2 I/O ports, 2x4h and 2x5h.
  203. x=2,4 for the Sound Blaster Pro
  204.  
  205. 2x4h is the address port (write only), 2x5h is the data port (read/write)
  206.  
  207. The programming sequence is as follows:
  208.  
  209. 1.  Write the address of the mixers register to 2x4h
  210. 2.  Read/Write the mixers register value from/to 2x5h
  211.  
  212. Mixer registers:
  213.  
  214. Register| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
  215. --------+----+----+----+----+----+----+----+----+
  216. 00h     |               Data Reset              |
  217. 02h     |                Reserved               |
  218. 04h     |   Voice Volume L  |   Voice Volume R  |
  219. 06h     |                Reserved               |
  220. 08h     |                Reserved               |
  221. 0Ah     | x  | x  | x  | x  | x  |  MIC Mixing  |
  222. 0Ch     | x  | x  |  In Filter   |   ADC   | x  |
  223. 0Eh     | x  | x  |DNFI| x  | x  | x  |VSTC| x  |
  224. 20h     |                Reserved               |
  225. 22h     |  Master Volume L  |  Master Volume R  |
  226. 24h     |                Reserved               |
  227. 26h     | FM Volume L       | FM Volume R       |
  228. 28h     | CD Volume L       | CD Volume R       |
  229. 2Ah     |                Reserved               |
  230. 2Ch     |                Reserved               |
  231. 2Eh     |   Line Volume L   |   Line Volume R   |
  232.  
  233. x=don't care
  234. Reserved=preserve original value
  235.  
  236. Register Descriptions:
  237.  
  238.   Reset Register (00h):
  239.     You can write any 8-bit value to this register to reset the mixer
  240.  
  241.   Voice Volume Regis